﻿/* ----------------------------------------------------------------------------
 * Copyright (c) Philip Stears 
 *
 * This source code is subject to terms and conditions of the Microsoft Public 
 * License (Ms-PL).
 * 
 * By using this source code in any fashion, you are agreeing to be bound 
 * by the terms of the Microsoft Public License.
 * 
 * To request a copy of the Microsoft Public License, send a request by email
 * to license@connectbasic.net.
 *
 * This notice must not be removed from this software.
 * ---------------------------------------------------------------------------- */

namespace ConnectBasic.Execution
{
    using System.Diagnostics.CodeAnalysis;

    /// <summary>
    /// Represents the kind of a token.
    /// </summary>
    public enum BasicTokenKind
    {

        /// <summary>
        /// The end of the file.
        /// </summary>
        EndOfFile,

        /// <summary>
        /// A contiguous series of new-line characters.
        /// </summary>
        NewLines,

        /// <summary>
        /// A contiguous series of whitespace characters.
        /// </summary>
        Whitespace,

        /// <summary>
        /// An invalid identifier.
        /// </summary>
        InvalidIdentifier,

        /// <summary>
        /// An invalid number.
        /// </summary>
        InvalidNumber,

        /// <summary>
        /// A comment.
        /// </summary>
        Comment,

        /// <summary>
        /// An identifier.
        /// </summary>
        Identifier,

        /// <summary>
        /// A line continuation character.
        /// </summary>
        LineContinuation,

        /// <summary>
        /// A literal integral number.
        /// </summary>
        LiteralInteger,

        /// <summary>
        /// A literal floating-point number.
        /// </summary>
        LiteralFloatingPointNumber,

        /// <summary>
        /// A literal string.
        /// </summary>
        LiteralString,

        /// <summary>
        /// A literal boolean.
        /// </summary>
        LiteralBoolean,

        /// <summary>
        /// The member dereferencing operator.
        /// </summary>
        Dot,

        /// <summary>
        /// The label marker/begin new logical line operator
        /// </summary>
        Colon,

        /// <summary>
        /// The parameter separator.
        /// </summary>
        Comma,

        /// <summary>
        /// The exponentiation operator.
        /// </summary>
        Power,

        /// <summary>
        /// The concatenation operator.
        /// </summary>
        Concatenate,

        /// <summary>
        /// The multiplication operator.
        /// </summary>
        Multiply,

        /// <summary>
        /// An opening paranthesis.
        /// </summary>
        [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Paranthesis")]
        ParanthesisOpen,

        /// <summary>
        /// An closing paranthesis.
        /// </summary>
        [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Paranthesis")]
        ParanthesisClose,

        /// <summary>
        /// The subtraction operator.
        /// </summary>
        Subtract,

        /// <summary>
        /// The addition operator.
        /// </summary>
        Add,

		/// <summary>
		/// The ParameterName operator
		/// </summary>
		ParameterName,

        /// <summary>
        /// The assignment/equality operator.
        /// </summary>
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1702:CompoundWordsShouldBeCasedCorrectly", MessageId = "AssignOr")]
        AssignOrEqual,

        /// <summary>
        /// The floating-point division operator.
        /// </summary>
        DivideFloatingPoint,

        /// <summary>
        /// The integral division operator.
        /// </summary>
        DivideIntegral,

        /// <summary>
        /// The less-than comparator.
        /// </summary>
        LessThan,

        /// <summary>
        /// The less-than-or-equal-to comparator.
        /// </summary>
        LessThanOrEqualTo,

        /// <summary>
        /// The greater-than comparator.
        /// </summary>
        GreaterThan,

        /// <summary>
        /// The greater-than-or-equal-to comparator.
        /// </summary>
        GreaterThanOrEqualTo,

        /// <summary>
        /// The not-equal-to comparator.
        /// </summary>
        NotEqualTo,

        /// <summary>
        /// The "Public" keyword.
        /// </summary>
        KeywordPublic,

        /// <summary>
        ///The "Private" keyword
        /// </summary>
        KeywordPrivate,

        /// <summary>
        ///The "Stop" keyword
        /// </summary>
        KeywordStop,

        /// <summary>
        ///The "Function" keyword
        /// </summary>
        KeywordFunction,

        /// <summary>
        ///The "Sub" keyword
        /// </summary>
        KeywordSub,

        /// <summary>
        ///The "Exit" keyword
        /// </summary>
        KeywordExit,

        /// <summary>
        ///The "End" keyword
        /// </summary>
        KeywordEnd,

        /// <summary>
        ///The "While" keyword
        /// </summary>
        KeywordWhile,

        /// <summary>
        ///The "Wend" keyword
        /// </summary>
        KeywordWend,

        /// <summary>
        ///The "For" keyword
        /// </summary>
        KeywordFor,

        /// <summary>
        ///The "Next" keyword
        /// </summary>
        KeywordNext,

        /// <summary>
        ///The "Dim" keyword
        /// </summary>
        KeywordDim,

        /// <summary>
        ///The "As" keyword
        /// </summary>
        KeywordAs,

        /// <summary>
        ///The "GoTo" keyword
        /// </summary>
        KeywordGoTo,

        /// <summary>
        ///The "Error" keyword
        /// </summary>
        KeywordError,
        
        /// <summary>
        ///The "On" keyword
        /// </summary>
        KeywordOn,

        /// <summary>
        ///The "Resume" keyword
        /// </summary>
        KeywordResume,

        /// <summary>
        ///The "ByVal" keyword
        /// </summary>
        [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Val")]
        KeywordByVal,

        /// <summary>
        ///The "ByRef" keyword
        /// </summary>
        KeywordByRef,

        /// <summary>
        ///The "Option" keyword
        /// </summary>
        KeywordOption,
        
        /// <summary>
        ///The "Explicit" keyword
        /// </summary>
        KeywordExplicit,

        /// <summary>
        ///The "Strict" keyword
        /// </summary>
        KeywordStrict,

        /// <summary>
        ///The "Compare" keyword
        /// </summary>
        KeywordCompare,

        /// <summary>
        ///The "Text" keyword
        /// </summary>
        KeywordText,

        /// <summary>
        ///The "Binary" keyword
        /// </summary>
        KeywordBinary,

        /// <summary>
        ///The "Const" keyword
        /// </summary>
        KeywordConst,

        /// <summary>
        ///The "If" keyword
        /// </summary>
        KeywordIf,

        /// <summary>
        ///The "Then" keyword
        /// </summary>
        KeywordThen,

        /// <summary>
        ///The "Else" keyword
        /// </summary>
        KeywordElse,

        /// <summary>
        ///The "ElseIf" keyword
        /// </summary>
        KeywordElseIf,

        /// <summary>
        ///The "Optional" keyword
        /// </summary>
        KeywordOptional,

        /// <summary>
        ///The "Is" keyword
        /// </summary>
        KeywordIs,

        /// <summary>
        ///The "IsNot" keyword
        /// </summary>
        KeywordIsNot,

        /// <summary>
        ///The "Nothing" keyword
        /// </summary>
        KeywordNothing,

        /// <summary>
        ///The "Set" keyword
        /// </summary>
        KeywordSet,

        /// <summary>
        ///The "Call" keyword
        /// </summary>
        KeywordCall,

        /// <summary>
        ///The "Not" keyword
        /// </summary>
        KeywordNot,

        /// <summary>
        ///The "To" keyword
        /// </summary>
        KeywordTo,
        
        /// <summary>
        ///The "Step" keyword
        /// </summary>
        KeywordStep,

        /// <summary>
        ///The "Do" keyword
        /// </summary>
        KeywordDo,

        /// <summary>
        ///The "Until" keyword
        /// </summary>
        KeywordUntil,

        /// <summary>
        ///The "Loop" keyword
        /// </summary>
        KeywordLoop,
    }
}
